This page last changed on Jul 22, 2004 by unkyaku.

WebWork在XWork标准校验框架基础上增加了客户端校验支持. 你可以在表单中的在<ww:form>标签中指定validate="true"来激活客户端校验:

<ww:form name="'test'" action="'javascriptValidation'" validate="true">
  ...
</ww:form>

为此你必须为表单指定name.

还应当确认<ww:form>标签中设置了正确的actionnamespace属性. 例如, 如果有一个名为"submitProfile"的活动在名空间"/user"中, 必须使用下列代码
<ww:form namespace="'/user'" action="'submitProfile'" validate="true">
  ...
</ww:form>

而下面的代码中, 表单可以正常工作, 客户端校验则不能:

<ww:form action="'/user/submitProfile.action'" validate="true">
  ...
</ww:form>

当然, 这需要你已经完成了所有标准的校验配置工作. 客户端教研室用于服务器端校验相同的校验规则. 如果服务器端校验不工作, 客户端校验也不工作.

并非全部校验器都支持客户端校验. 仅有实现ScriptValidationAware接口的校验器支持这个特性. 具体情况参见WebWork校验器列表

注意: 在UI标签中的required属性并不进行任何客户端校验.


升级警告: 该特性在WebWork 2.1引入. 如果从上个版本升级, 确认validators.xml中使用了正确的校验器. 你必须使用标准XWork校验器的com.opensymphony.webwork.validators.JavaScriptRequired*Validator版本.

构建支持客户端校验的校验器

任何实现com.opensymphony.webwork.validators.ScriptValidationAware接口的校验器都支持客户端校验:

public interface ScriptValidationAware extends FieldValidator {
    public String validationScript(Map parameters);
}

如果激活了客户端校验, validationScript返回的字符串将在客户端表端提交前执行. 例如, requiredstring校验器包含下列代码:

public String validationScript(Map parameters) {
        String field = (String) parameters.get("name");
        StringBuffer js = new StringBuffer();

        js.append("value = form.elements['" + field + "'].value;\n");
        js.append("if (value == \"\") {\n");
        js.append("\talert('" + getMessage(null) + "');\n");
        js.append("\treturn '" + field + "';\n");
        js.append("}\n");
        js.append("\n");

        return js.toString();
}

目前只支持JavaScript.

Document generated by Confluence on Dec 14, 2004 16:36